﻿using System;
using System.Collections.Generic;
using System.Configuration;
using Flagwind.Data.Configuration;

namespace Flagwind.Data
{
	/// <summary>
	/// 提供对数据引擎映射的访问。
	/// </summary>
	public static class MappingManager
	{
		#region 私有字段

		private static readonly Dictionary<string, DataMapping> _mappings = new Dictionary<string, DataMapping>();

		#endregion

		#region 构造方法

		static MappingManager()
		{
			Initialize();
		}

		#endregion

		#region 公共方法

		/// <summary>
		/// 根据指定的名称获取一个数据映射实例。
		/// </summary>
		/// <param name="name">数据映射名称。</param>
		/// <returns>数据映射实例。</returns>
		public static DataMapping GetMapping(string name)
		{
			if(string.IsNullOrWhiteSpace(name))
			{
				throw new ArgumentNullException(name);
			}
			return _mappings.ContainsKey(name) ? _mappings[name] : null;
		}

		#endregion

		#region 私有方法

		private static void Initialize()
		{
//			// 获取配置节点。
//			DataSection section = ConfigurationManager.GetSection(DataSection.SectionName) as DataSection;
//			// 配置节点未找到。
//			if(section == null)
//			{
//				throw new ConfigurationErrorsException(string.Format("未找到配置节点 '{0}'。", DataSection.SectionName));
//			}
//			// 初始化。
//			foreach(MappingElement element in section.Mappings)
//			{
//				if(string.IsNullOrWhiteSpace(element.Name))
//				{
//					throw new ConfigurationErrorsException("映射名称不能为空。");
//				}
//				if(string.IsNullOrWhiteSpace(element.Path))
//				{
//					throw new ConfigurationErrorsException("映射路径不能为空。");
//				}
//				_mappings[element.Name] = new DataMapping(element.Name, element.Path);
//			}
		}

		#endregion
	}
}